﻿

namespace CsharpPro._1016;

public class Demo
{
    public static int[] SortThreeNumbers(int x, int y, int z)
    {
        // 找出最小值
        int min = Math.Min(x, Math.Min(y, z));

        // 找出最大值
        int max = Math.Max(x, Math.Max(y, z));

        // 计算中间值
        int mid = x + y + z - min - max;

        // 返回排序后的数组（从小到大）
        return new int[] { min, mid, max };
    }

    public bool Judgeseven(int number)
    {
        if (number % 7 == 0 || number.ToString().Contains("7"))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public void Print()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                int num = i * j;
                Console.WriteLine($"{i} * {j} = {num}");
            }
        }
    }

    public void PrintPerfectNumbers(int maxRange)
    {
        Console.WriteLine($"{maxRange}以内的完数有：");

        for (int num = 1; num <= maxRange; num++)
        {
            int factorSum = 0;

            // 计算真因子之和（优化至num/2）
            for (int i = 1; i <= num / 2; i++)
            {
                if (num % i == 0)
                {
                    factorSum += i;
                }
            }

            // 找到完数时直接输出
            if (factorSum == num)
            {
                Console.WriteLine(num);
            }
        }
    }

    public bool IsValidNumber(string number)
    {
        if (string.IsNullOrWhiteSpace(number))
            return false;
            
        foreach (char c in number)
        {
            if (!char.IsDigit(c))
                return false;
        }
        
        if (number.Length > 1 && number[0] == '0')
            return false;
            
        return true;
    }

    // 计算数字的位数
    public int GetDigitCount(string number)
    {
        return number.Length;
    }

    // 逆序数字字符串
    public string ReverseNumber(string number)
    {
        char[] chars = number.ToCharArray();
        Array.Reverse(chars);
        return new string(chars);
    }
    
    // 处理数字的完整流程
    public void ProcessNumber()
    {
        // 第一步：输入位数
        int expectedLength;
        while (true)
        {
            Console.Write("请输入数字的位数（正整数）：");
            string lengthInput = Console.ReadLine();
            
            if (int.TryParse(lengthInput, out expectedLength) && expectedLength > 0)
            {
                break;
            }
            Console.WriteLine("输入无效，请输入一个正整数作为位数！");
        }
        
        // 第二步：输入具体数字并验证位数是否匹配
        string number;
        while (true)
        {
            Console.Write($"请输入一个{expectedLength}位的正整数：");
            number = Console.ReadLine();
            
            if (IsValidNumber(number))
            {
                int actualLength = GetDigitCount(number);
                if (actualLength == expectedLength)
                {
                    break;
                }
                Console.WriteLine($"输入的数字不是{expectedLength}位，请重新输入！");
            }
            else
            {
                Console.WriteLine("输入无效，请输入一个有效的正整数！");
            }
        }
        
        // 第三步：显示结果
        string reversed = ReverseNumber(number);
        Console.WriteLine($"你输入的{expectedLength}位数字是：{number}");
        Console.WriteLine($"它的逆序数字是：{reversed}");
    }


    public void Printrhombus(int size)
    {
        int half = size / 2; // 计算中间位置（用于控制空格和星号数量）

        // 上半部分（包括中间行）
        for (int i = 0; i <= half; i++)
        {
            // 打印空格：从 half 递减到 0
            for (int j = 0; j < half - i; j++)
            {
                Console.Write(" ");
            }

            // 打印星号：从 1 递增到 size（每次+2）
            for (int k = 0; k < 2 * i + 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine(); // 换行
        }

        // 下半部分（不包括中间行）
        for (int i = half - 1; i >= 0; i--)
        {
            // 打印空格：从 1 递增到 half
            for (int j = 0; j < half - i; j++)
            {
                Console.Write(" ");
            }

            // 打印星号：从 size-2 递减到 1（每次-2）
            for (int k = 0; k < 2 * i + 1; k++)
            {
                Console.Write("*");
            }

            Console.WriteLine(); // 换行
        }
    }
}
    
